#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "usermanagementwidget.h"
#include "itemmanagementwidget.h"
#include "recordsviewwidget.h"
#include "reportswidget.h"
#include "profilewidget.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
    , workAreaStack(nullptr)
    , userManagementWidget(nullptr)
    , itemManagementWidget(nullptr)
    , recordsViewWidget(nullptr)
    , reportsWidget(nullptr)
    , profileWidget(nullptr)
    , userLabel(nullptr)
    , dbLabel(nullptr)
{
    ui->setupUi(this);
    
    // 设置状态栏
    setupStatusBar();
    
    // 初始化工作区
    setupWorkArea();
    
    // 连接退出登录按钮信号槽
    connect(ui->logoutBtn, &QPushButton::clicked, this, &MainWindow::onLogoutClicked);
    
    // 连接侧边栏按钮信号槽
    connect(ui->dashboardBtn, &QPushButton::clicked, this, &MainWindow::onSideBarButtonClicked);
    connect(ui->inventoryBtn, &QPushButton::clicked, this, &MainWindow::onSideBarButtonClicked);
    connect(ui->userMgmtBtn, &QPushButton::clicked, this, &MainWindow::onSideBarButtonClicked);
    connect(ui->recordsBtn, &QPushButton::clicked, this, &MainWindow::onSideBarButtonClicked);
    connect(ui->reportsBtn, &QPushButton::clicked, this, &MainWindow::onSideBarButtonClicked);
    connect(ui->settingsBtn, &QPushButton::clicked, this, &MainWindow::onSideBarButtonClicked);
    
    // 设置窗口关闭时的行为
    this->setAttribute(Qt::WA_QuitOnClose, true);
}

MainWindow::~MainWindow()
{
    delete ui;
    if (userManagementWidget) {
        delete userManagementWidget;
    }
    if (itemManagementWidget) {
        delete itemManagementWidget;
    }
    if (recordsViewWidget) {
        delete recordsViewWidget;
    }
    if (reportsWidget) {
        delete reportsWidget;
    }
    if (profileWidget) {
        delete profileWidget;
    }
}

// 设置当前登录用户
void MainWindow::setCurrentUser(const UserInfo& userInfo)
{
    m_currentUser = userInfo;
    updateUserStatus();
    configureUserPermissions(userInfo.role);
}

// 退出登录处理
void MainWindow::onLogoutClicked()
{
    int ret = QMessageBox::question(this, "确认退出", 
                                   "确定要退出登录吗？", 
                                   QMessageBox::Yes | QMessageBox::No);
    
    if (ret == QMessageBox::Yes) {
        emit logoutRequested();
    }
}

// 直接退出登录（无确认对话框）
void MainWindow::onDirectLogout()
{
    // 密码修改后直接退出登录，不显示确认对话框
    emit logoutRequested();
}

// 重写窗口关闭事件
void MainWindow::closeEvent(QCloseEvent *event)
{
    // 直接退出程序，不显示对话框
    event->accept();
    QApplication::quit();
}

// 根据用户角色配置界面权限
void MainWindow::configureUserPermissions(const QString& role)
{
    if (role == "admin") {
        // 管理员：显示所有功能
        ui->userMgmtBtn->setVisible(true);
    } else if (role == "user") {
        // 普通用户：隐藏用户管理相关功能
        ui->userMgmtBtn->setVisible(false);
    }
}

// 更新状态栏用户信息
void MainWindow::updateUserStatus()
{
    QString roleText = (m_currentUser.role == "admin") ? "管理员" : "普通用户";
    if (userLabel) {
        userLabel->setText(QString("👤 当前用户: %1 (%2)").arg(m_currentUser.username, roleText));
    }
    if (dbLabel) {
        dbLabel->setText("🔗 数据库: 已连接");
    }
}

// 侧边栏按钮点击处理
void MainWindow::onSideBarButtonClicked()
{
    QPushButton* senderButton = qobject_cast<QPushButton*>(sender());
    if (!senderButton) return;
    
    // 重置所有按钮的选中状态
    ui->dashboardBtn->setChecked(false);
    ui->inventoryBtn->setChecked(false);
    ui->userMgmtBtn->setChecked(false);
    ui->recordsBtn->setChecked(false);
    ui->reportsBtn->setChecked(false);
    ui->settingsBtn->setChecked(false);
    
    // 设置当前点击的按钮为选中状态
    senderButton->setChecked(true);
    
    // 根据点击的按钮切换界面
    if (senderButton == ui->dashboardBtn) {
        switchToView(0); // 仪表板
    } else if (senderButton == ui->inventoryBtn) {
        switchToView(1); // 库存管理
    } else if (senderButton == ui->userMgmtBtn) {
        switchToView(2); // 用户管理
    } else if (senderButton == ui->recordsBtn) {
        switchToView(3); // 操作记录
    } else if (senderButton == ui->reportsBtn) {
        switchToView(4); // 统计报表
    } else if (senderButton == ui->settingsBtn) {
        switchToView(5); // 个人信息
    }
}

// 初始化工作区堆栈
void MainWindow::setupWorkArea()
{
    // 创建堆栈控件
    workAreaStack = new QStackedWidget(this);
    workAreaStack->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
    
    // 获取原有的工作区并替换
    QWidget* originalWorkArea = ui->workArea;
    QLayout* parentLayout = originalWorkArea->parentWidget()->layout();
    
    if (parentLayout) {
        // 找到工作区在布局中的位置并替换
        QHBoxLayout* hLayout = qobject_cast<QHBoxLayout*>(parentLayout);
        if (hLayout) {
            // 添加堆栈控件到原来工作区的位置
            hLayout->addWidget(workAreaStack);
            
            // 将原来的欢迎界面作为第一个页面添加到堆栈中
            workAreaStack->addWidget(originalWorkArea); // 0: 仪表板/欢迎界面
            
            // 创建占位符界面（后续会替换为真实功能界面）
            auto createPlaceholder = [](const QString& text) {
                QWidget* placeholder = new QWidget();
                QVBoxLayout* layout = new QVBoxLayout(placeholder);
                QLabel* label = new QLabel(text);
                label->setAlignment(Qt::AlignCenter);
                label->setStyleSheet("font-size: 24px; color: #6C757D;");
                layout->addWidget(label);
                return placeholder;
            };
            
            // 创建库存管理界面
            itemManagementWidget = new ItemManagementWidget(this);
            itemManagementWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
            workAreaStack->addWidget(itemManagementWidget); // 1: 库存管理
            
            // 创建用户管理界面
            userManagementWidget = new UserManagementWidget(this);
            userManagementWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
            workAreaStack->addWidget(userManagementWidget); // 2: 用户管理
            
            // 创建操作记录界面
            recordsViewWidget = new RecordsViewWidget(this);
            recordsViewWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
            workAreaStack->addWidget(recordsViewWidget); // 3: 操作记录
            
            // 创建统计报表界面
            reportsWidget = new ReportsWidget(this);
            reportsWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
            workAreaStack->addWidget(reportsWidget); // 4: 统计报表
            
            // 创建个人信息界面
            profileWidget = new ProfileWidget(this);
            profileWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
            workAreaStack->addWidget(profileWidget); // 5: 个人信息
            
            // 默认显示仪表板
            workAreaStack->setCurrentIndex(0);
        }
    }
}

// 切换到指定界面
void MainWindow::switchToView(int viewIndex)
{
    if (workAreaStack && viewIndex >= 0 && viewIndex < workAreaStack->count()) {
        workAreaStack->setCurrentIndex(viewIndex);
        
        // 如果切换到库存管理界面，刷新数据
        if (viewIndex == 1 && itemManagementWidget) {
            itemManagementWidget->setCurrentUser(m_currentUser);
            itemManagementWidget->refreshItemList();
        }
        
        // 如果切换到用户管理界面，刷新数据
        if (viewIndex == 2 && userManagementWidget) {
            userManagementWidget->setCurrentUser(m_currentUser);
            userManagementWidget->refreshUserList();
        }
        
        // 如果切换到操作记录界面，刷新数据
        if (viewIndex == 3 && recordsViewWidget) {
            recordsViewWidget->setCurrentUser(m_currentUser);
            recordsViewWidget->refreshRecords();
        }
        
        // 如果切换到统计报表界面，刷新数据
        if (viewIndex == 4 && reportsWidget) {
            reportsWidget->refreshReports();
        }
        
        // 如果切换到个人信息界面，设置用户信息
        if (viewIndex == 5 && profileWidget) {
            profileWidget->setCurrentUser(m_currentUser);
            // 连接退出登录信号到直接退出方法（使用UniqueConnection防止重复连接）
            connect(profileWidget, &ProfileWidget::logoutRequired, 
                    this, &MainWindow::onDirectLogout, Qt::UniqueConnection);
        }
    }
}

// 设置状态栏
void MainWindow::setupStatusBar()
{
    // 创建状态栏标签
    userLabel = new QLabel("👤 当前用户: 未登录", this);
    dbLabel = new QLabel("🔗 数据库: 未连接", this);
    
    // 设置标签样式和最小宽度
    userLabel->setMinimumWidth(200);
    dbLabel->setMinimumWidth(150);
    
    userLabel->setStyleSheet("QLabel { padding: 4px 8px; }");
    dbLabel->setStyleSheet("QLabel { padding: 4px 8px; }");
    
    // 添加到状态栏
    ui->statusbar->addWidget(userLabel);
    ui->statusbar->addPermanentWidget(dbLabel);
}
